Inboxの理解
aosでは、プロセスはハンドラーを介してメッセージに応じて実行されます。未処理のメッセージはプロセスのInboxにルーティングされます。
ハンドラーとは?
ハンドラーは、プロセス内でメッセージを受信して評価する関数です。メッセージをパラメーターとして受け取り、それに基づいて動作します。
lua
function main(Message, ao)
...dostuff
return {
Output = ...,
Messages = {},
Spawns = {}
}
end
main
関数は、Luaのテーブルを返し、Output
、Messages
、Spawns
またはError
を提供します。aosを使用すると、ハンドラーを使用してプロセスに機能を追加できます。ハンドラーは3つのパラメーターを取ります:
- ハンドラーの名前
- マッチャー関数
- ハンドル関数
lua
Handlers.add("name",
function (Msg)
-- Does this message match (return true or false)
return Msg.Action == "Register"
end,
function (Msg)
print("Registered User.")
table.insert(Members, Msg.From)
ao.send({Target = Msg.From, Data = "Registered."})
end
)
Inboxについては?
Inboxは、まだ処理されていないメッセージのためのストレージエリアです。受信アイテムの処理を待つ「保持ゾーン」と考えてください。メッセージが処理されると、もはや「受信」扱いではなくなり、Inboxを離れます。
例: Inboxはボイスメールのようなものです。未対応の電話がボイスメールに転送されて後で対応されるのと同様に、プロセスがすぐに処理しないメッセージはInboxに送られます。このようにして、未処理のメッセージは、処理する準備が整うまで保存されます。
概要
最初は、すべてのメッセージがInboxに届くように見えるかもしれませんが、処理された後に消えると混乱を招くことがあります。ボイスメールのアナロジーを考えると、応答した電話がボイスメールに行かないのと同じように、処理したメッセージはInboxに表示されないということが明らかになります。これにより、Inboxとハンドラーの両方の役割が示されます。